package co.edu.usbcali.egrapico.logica;

/**
 * Clase para la traducci�n de la representaci�n de un
 * <Code>Antecedente</Code> desde <I>GraPiCO Textual</I> hacia <I>C�lculo
 * PiCO</I>. <P> Recibe en <I>GraPiCO Textual</I> alguna de las opciones: <P>
 * <Blockquote> Restricciones ->
 * <Code>ClaseRestricciones ListaRestricciones</Code><P> Env�oMensaje ->
 * <Code>Identificador � Mensaje </Code> </Blockquote><P> Traducci�n a
 * <I>C�lculo PiCO</I> de cada constructor:<P> <Blockquote><Pre>
 *              Restricciones
 *              Env�oMensaje
 * </Pre></Blockquote><P>
 *
 * @author Johanna Noguera Le�n & Alejandro Berm�dez Mart�nez.
 * @version 1.0
 * @since Enero de 2005
 */
public class Antecedent {

    // Variable para almacenar la clasificaci�n de un antecedente
    // como restricciones o env�o de mensaje.
    char SyncSymbol;
    // Variable para almacenar el antecedente representado en c�lculo PiCO.
    String antecedentPico = "";
    // Variable para almacenar el antecedente en GraPiCO Textual.
    String antecGraPicoT = "";
    // Objetos de las clases Constraints y SendMessage, para traducir
    // restricciones o env�o de mensaje, seg�n sea el antecedente.
    Constraints constraints;
    SendMessage sendMessage;
    // Nombre o lista de nombres de los procesos que se est�n traduciendo.
    String nameCurrentProcess = "";

    /**
     * M�todo constructor de la clase
     * <Code>Antecedent</Code>. <P> Obtiene el primer caracter de la expresi�n
     * mediante el cual se identificar� si se trata de
     * <Code>Restricciones</Code> o de un
     * <Code>Env�o de Mensaje</Code>.
     *
     * @param antecedentGraPicoT Expresi�n equivalente a la representaci�n de un
     * antecedente en <I>GraPiCO Textual</I>.
     * @param nameProcess Nombre o lista de nombres de procesos.
     */
    public Antecedent(String antecedentGraPicoT, String nameProcess) {

        // Se obtiene el nombre o lista de nombres de procesos.
        nameCurrentProcess = nameProcess;

        SyncSymbol = antecedentGraPicoT.charAt(0);
        antecGraPicoT = antecedentGraPicoT;
    }

    /**
     * M�todo generador de la traducci�n de un
     * <Code>Antecedente</Code>.<P> Obtiene la traducci�n del antecedente seg�n
     * este sea
     * <Code>Restricciones</Code> o un
     * <Code>Env�o de Mensaje</Code>.
     *
     * @return el
     * <Code>Antecedente<Code> traducido a PiCO.
     */
    public String traslate() {

        if (SyncSymbol == '?' || SyncSymbol == '!') {
            constraints = new Constraints(antecGraPicoT, nameCurrentProcess);
            antecedentPico = constraints.traslate();
        } else {
            sendMessage = new SendMessage(antecGraPicoT, nameCurrentProcess);
            antecedentPico = sendMessage.traslate();
        }
        return antecedentPico;
    }
}